---
title: "Authentication"
description: ""
---

The Panora API uses [API keys](/core-concepts/auth) to authenticate requests. You can view and manage your API keys in the [Panora Dashboard](https://app.panora.dev/api-keys).

Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth.

Use your API key by setting it in the initial configuration of Panora. The Node.js library will then automatically send this key in each request.

All API requests must be made over [HTTPS](http://en.wikipedia.org/wiki/HTTP_Secure). Calls made over plain HTTP will fail. API requests without authentication will also fail.

You also have to catch a [connection token](/core-concepts/auth) which contains metadata about the end-user.

<Info>In this example, we will create a contact in a CRM. Visit other sections of the [documentation](/ticketing/overview) to find category-specific examples.</Info>
<CodeGroup>
  ```javascript TypeScript
  import { Panora } from "@panora/sdk";

  const panora = new Panora({
    apiKey: process.env.API_KEY,
  });

  const input = {
      first_name: 'tom',
      last_name: 'jedusor',
      email_addresses: [
        {
          'email_address': 'tom@jedusor.com',
          'email_address_type': 'PERSONAL'
        }
      ],
      phone_numbers: [
        {
          'phone_number': '+33650438278',
          'phone_type': 'MOBILE'
        }
      ],
  };

  const result = await panora.crm.contacts.create({
    xConnectionToken: "YOUR_USER_CONNECTION_TOKEN",
    unifiedCrmContactInput: input,
  });

  console.log(result);
  ```

 ```python Python
  import os
  from panora_sdk import Panora

  panora = Panora(
    api_key=os.getenv("API_KEY", ""),
  )

  body = {
    'first_name': 'tom',
    'last_name': 'jedusor',
    'email_addresses': [
      {
        'email_address': 'tom@jedusor.com',
        'email_address_type': 'PERSONAL'
      }
    ],
    'phone_numbers': [
      {
        'phone_number': '+33650438278',
        'phone_type': 'MOBILE'
      }
    ]
  }

  res = panora.crm.contacts.create(x_connection_token="YOUR_USER_CONNECTION_TOKEN", unified_crm_contact_input=body)

  print(res)
  ```

  ```shell curl
  curl --request POST \
  --url https://api.panora.dev/crm/contacts \
  --header 'x-api-key: <api-key>' \
  --header 'Content-Type: application/json' \
  --header 'x-connection-token: <MY_USER_CONNECTION_TOKEN>' \
  --data '{
      "first_name": "tom",
      "last_name": "jedusor",
      "email_addresses": [
        {
          "email_address": "tom@jedusor.com",
          "email_address_type": "PERSONAL"
        }
      ],
      "phone_numbers": [
        {
          "phone_number": "+33650438278",
          "phone_type": "MOBILE"
        }
      ]
    }'
  ```
</CodeGroup>
